#include<bits/stdc++.h> 
using namespace std;
// 	给定一个K个整数组成的序列，找到其中和最大的连续子序列，将该和、首、尾输出
//1.每个输入具有一个测试用例，测试用例由两行组成，第一行为1个正整数K≤10000， 
//	表示记录的总数。
//2.第二行会给出K个数字，用空格隔开 
//3.对于每一个测试用例，输出最大和，最大和序列的首数字和尾数字（不是坐标哦） 
//4.如果输出不唯一，则需要输出最早出现的一条
//5.如果最大值为负数，则最大值为0 ，首尾为整条序列的首尾 
//6.遍历

int main(){
	int K;
	cin>>K;
	int numbers[K];
	for(int i = 0;i<K;i++){
		cin>>numbers[i];
	}
	int max_ = -1;	//要考虑输入中最大序列和等于0的情况，例如3 -1 0 -2这个例子，应该输出0 0 0，如果max_初始值为0的逻辑会输出0 -1 -2 
	int start, end;
	start = 0;
	end = 0;
	for(int i=0;i<K;i++){
		if(numbers[i]<0) continue; //序列求最大和，不可能以负数开始 
		int temp = 0;
		for(int j=i;j<K;j++){
			temp += numbers[j];
			if(temp > max_){ //只有大于才做，等于也不做，保证出现多个最大和的时候能使得start和end都最小，也保证最大和后面如果还有多个0的时候不会延长序列 
				start = i;
				end = j;
				max_ = temp;
			}
		}
	}
	if(max_ == -1 && start == 0 && end == 0){//如果最大和是负数的情况 
		cout<<"0 "<<numbers[0]<<" "<<numbers[K-1]<<endl;
	}
	else{
		cout<<max_<<" "<<numbers[start]<<" "<<numbers[end]<<endl;
	}
	return 0;
}

